
/* 进行打印操作，一个全局的函数 */
import 'package:flutter/foundation.dart';

void jkLog(Object message, StackTrace current) {
  JKCustomTrace programInfo = JKCustomTrace(current);
  // if (!isInDebugMode) return;
  // release 模式直接返回
  if (kReleaseMode) return;
  print("所在文件: ${programInfo.fileName}, 所在行: ${programInfo.lineNumber}, 打印信息: $message");
}

/*
 * Flutter的四种运行模式：Debug、Release、Profile、test
 * 当App运行在Release环境时，inProduction为true；当App运行在Debug和Profile环境时，inProduction为false。
 */
const bool inProduction = const bool.fromEnvironment("dart.vm.product");

/* 判断当前是不是 Debug 模式 */
bool get isInDebugMode {
  bool inDebugMode = false;
  //如果debug模式下会触发赋值
  assert(inDebugMode = true);
  return inDebugMode;
}

class JKCustomTrace {
  final StackTrace _trace;

  String fileName;
  int lineNumber;
  int columnNumber;

  JKCustomTrace(this._trace) {
    _parseTrace();
  }

  /* 获取调用的轨迹 */
  void _parseTrace() {
    /* 切割 */
    var traceString = this._trace.toString().split("\n")[0];
    /* 匹配所在的文件 */
    var indexOfFileName = traceString.indexOf(RegExp(r'[A-Za-z_]+.dart'));
    var fileInfo = traceString.substring(indexOfFileName);
    /* 匹配坐在的行 */
    var listOfInfos = fileInfo.split(":");
    this.fileName = listOfInfos[0];
    this.lineNumber = int.parse(listOfInfos[1]);
    var columnStr = listOfInfos[2];
    columnStr = columnStr.replaceFirst(")", "");
    this.columnNumber = int.parse(columnStr);
  }
}